package org.ciallo.easytokencore.exception.response;

import lombok.Data;

/**
 * 统一异常响应封装类
 *
 * <p>核心功能：</p>
 * <ul>
 *   <li>提供标准化的异常响应格式</li>
 *   <li>包含错误码、错误信息和可选数据</li>
 *   <li>提供快速创建成功/失败响应的方法</li>
 * </ul>
 *
 * <p>使用说明：</p>
 * <ol>
 *   <li>所有异常响应都应使用此类进行封装</li>
 *   <li>成功响应使用success()静态方法</li>
 *   <li>失败响应使用fail()静态方法</li>
 *   <li>通过Lombok自动生成getter/setter</li>
 * </ol>
 *
 * @param <T> 响应中携带的数据类型
 * @Description: 统一异常响应封装
 * @Author: Jukomu
 * @Package: org.ciallo.easytokencore.exception.response
 * @Project: easy-token-demo
 * @Version: 1.0.0
 * @name: ExceptionResponse
 * @Date: 2025-05-07
 * @Filename: ExceptionResponse
 */
@Data
public class ExceptionResponse<T> {
    private int code;
    private String message;
    private T data;

    /**
     * 构造方法
     *
     * @param code    响应状态码
     * @param message 响应消息
     * @param data    响应数据
     */
    public ExceptionResponse(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 创建成功响应
     *
     * @param data 响应数据
     * @param <T>  数据类型
     * @return 成功响应对象
     */
    public static <T> ExceptionResponse<T> success(T data) {
        return new ExceptionResponse<>(200, "success", data);
    }

    /**
     * 创建失败响应
     *
     * @param code    错误码
     * @param message 错误信息
     * @param <T>     数据类型
     * @return 失败响应对象
     */
    public static <T> ExceptionResponse<T> fail(int code, String message) {
        return new ExceptionResponse<>(code, message, null);
    }
}

